#!/usr/bin/python
# -*- coding: UTF-8 -*-
"""
@author:吹神
@file:base_request.py
@time:2021/04/02
"""
from json.decoder import JSONDecodeError

import requests

from config.settings import log, BASE_URL

str_req = """
----------------请求参数----------------
请求URL    ： 【{url}】
请求METHOD ： 【{method}】
请求HEADER ： 【{header}】
请求BODY   ： 【{body}】
"""

str_resp = """
----------------响应参数----------------
响应CODE   ： 【{code}】
响应HEADER ： 【{header}】
响应BODY   ： 【{body}】
"""


class BaseRequest:

    @staticmethod
    def format_requests(method, url, **kwargs):
        headers = kwargs.get("headers", None)
        kwargs.pop("headers", None)
        return str_req.format(url=url, method=method, body=kwargs, header=headers)

    @staticmethod
    def format_response(response):
        try:
            body = response.json()
        except JSONDecodeError:
            body = response.text
        return str_resp.format(code=response.status_code, header=response.headers, body=body)


def log_request(func):
    def wrapper(*args, **kwargs):
        method, url = args
        if not url.startswith("http://"):
            url = BASE_URL + url
        new_args = (method, url)
        log.info(BaseRequest.format_requests(method, url, **kwargs))
        r = func(*new_args, **kwargs)
        log.info(BaseRequest.format_response(r))
        return r

    return wrapper


# @log.catch
@log_request
def mi_request(method, url, **kwargs):
    try:
        return requests.request(method, url, **kwargs)
    except Exception as e:
        log.error(e)
        raise e
